package com.baiyue.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baiyue.entity.UserEntity;
import com.baiyue.model.SelectOptionsResult;
import com.baiyue.model.user.LoginDataRequest;
import com.baiyue.model.user.UserInfoDataRequest;
import com.baiyue.model.user.UserInfoDataResponse;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author WuBo
 */
public interface UserService {
    /**
     * 根据Id查询
     *
     * @param request
     * @return
     */
    UserInfoDataResponse findById(UserInfoDataRequest request);

    /**
     * 根据用户名查询
     *
     * @param username
     * @return
     */
    UserEntity findByUsername(String username);

    /**
     * 根据用户名进行模糊查询
     * @param username 用户名
     * @return
     */
   /* Page<UserEntity> findVagueByUsername(SearchEntity searchEntity,Page<UserEntity> page);*/


    /**
     * 获得当前登录用户
     * @param request
     * @return
     */
    UserEntity getLoginUser(HttpServletRequest request);

    /**
     * 获得当前登录用户
     * @param request
     * @param response
     * @return
     */
    UserEntity getLoginUser(HttpServletRequest request, HttpServletResponse response);

    /**
     * 登录逻辑
     *
     * @param request
     * @return
     */
    String login(LoginDataRequest request);

    /**
     * 退出当前登录用户
     */
    void signOut();

    /**
     * 获得当前用户cookie是否过期
     * 如没有过期，则直接登录
     */
    void logged();

    /**
     * 切换用户
     * @param username 用户名
     * @param password 密码
     * @return
     */
    String switchUser(String username,String password);
    /**
     * 分页查询
     *
     * @param request 查询入参
     * @return 列表
     */
    Page<UserInfoDataResponse> findAll(UserInfoDataRequest request);

    /**
     * 分页查询已删除的用户信息
     * @param page
     * @param userEntity
     * @return
     */
    Page<UserEntity> findDelStatusUser(Page<UserEntity> page,UserEntity userEntity);

    /**
     * 不分页查询
     *
     * @return 列表
     */
    List<UserEntity> findAll();

    /**
     * 新增
     *
     * @param request 用户
     */
    void insert(UserInfoDataRequest request);

    /**
     * 根据id 删除
     * @param request id
     */
    void deleteById(UserInfoDataRequest request);

    /**
     * 根据ID更新
     *
     * @param request
     */
    void update(UserInfoDataRequest request);

    /**
     * 修改账号状态
     * @param id
     * @param status
     */
    void updateStatus(Integer id,Integer status);

    /**
     * 获取下拉框数据，用户名和id
     * @return
     */
    List<SelectOptionsResult> getUserAndId();

    /**
     * 根据ids获取邮箱
     * @param ids
     * @return
     */
    List<String> batchEmailSelectById(List<Integer> ids);

    /**
     * 根据邮箱删除用户（假删除）
     * @param email
     */
    Integer deleteByEmail(String email);
}
